//============================================================================
// Nombre		: IUC.cpp
// Materia		: Organizacion de Datos (75.06) - FIUBA
// Catedra		: AZCURRA-GUTIERREZ-SANTOS
// Autor		: Tkaczyszyn, Muszalski, Gallinal, Fernandez
// Descripcion	: TPDatos , Ansi-style
//============================================================================

#include "Correo.h"


	 Correo::Correo(string mailPop3){

		GeneradorIUC* genIuc = GeneradorIUC::getInstancia();


		this->iuc = genIuc->generarNuevoIUC();

		parsear(mailPop3);


		 }
	
	void Correo::parsear(string unparsedMail){

		static const string month [] = {"","Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
		static const string monthnum [] = {"","01","02","03","04","05","06","07","08","09","10","11","12"};

		//aca busco el date
		string newstring(unparsedMail);
		int startdate = newstring.find("Date: ") + 6;
		newstring = newstring.substr(startdate);
		int enddate = newstring.find("\n");
		string unafecha(newstring.substr(0,enddate-1));

		//aca busco el to
		int startto = newstring.find("To: ") + 4;
		newstring = newstring.substr(startto);
		int startfrom = newstring.find("From: ");
		this->destinatarios = newstring.substr(0,startfrom-1);//2 = strlen(CRLF)

		//aca busco el from
		newstring = newstring.substr(startfrom + 6);
		int startsubject = newstring.find("Subject: ");
		this->origen = newstring.substr(0,startsubject-2);

		//aca busco el subject
		newstring = newstring.substr(startsubject+9);
		int endsubject = newstring.find("X-Original-Sender: ");
		this->asunto = newstring.substr(0,endsubject-1);
		//cout << subject << endl;

		int startcontenttype = newstring.find("Content-Type: ");
		newstring = newstring.substr(startcontenttype);
		int startbody = newstring.find("\n");
		this->mensaje = newstring.substr(startbody+3);


		cout << this->mensaje << endl;



		int nextblack = unafecha.find(" ");
		unafecha = unafecha.substr(nextblack+1);

		nextblack = unafecha.find(" ");
		string dia = unafecha.substr(0,nextblack);
		dia = (dia.length()==1)?"0"+dia:dia;
		unafecha = unafecha.substr(nextblack+1);

		nextblack = unafecha.find(" ");
		string mes = unafecha.substr(0,nextblack);
		unafecha = unafecha.substr(nextblack+1);

		nextblack = unafecha.find(" ");
		string anio = unafecha.substr(0,nextblack);
		unafecha = unafecha.substr(nextblack+1);

		nextblack = unafecha.find(" ");
		string horas = unafecha.substr(0,nextblack);

		string hora = horas.substr(0,2);
		string minuto = horas.substr(3,2);
		string segundo = horas.substr(6,2);


		
		int i = 0;
		do{i++;}while(mes.compare(month[i]));
		mes = monthnum[i];


		this->fecha = anio+mes+dia+hora+minuto+segundo;
		}

	string Correo::toString() {

			string myiuc(this->iuc->getId());
			string fecha = this->fecha;
			string origen = this->origen;
			string longorigen = IntToString(origen.length());
			string destinatarios = this->destinatarios;
			string longdestinatarios = IntToString(destinatarios.length());
			string asunto = this->asunto;
			string longasunto = IntToString(asunto.length());
			string mensaje = this->mensaje;
			string longmensaje = IntToString(mensaje.length());

			string salida = "";

			salida +=myiuc;
			salida +=fecha;
			salida +=longorigen;
			salida +=longdestinatarios;
			salida +=longasunto;
			salida +=longmensaje;
			salida +=origen;
			salida +=destinatarios;
			salida +=asunto;
			salida +=mensaje;

			return salida;

		}
